package com.gxa.xiaoucomeshome.service;

import com.gxa.xiaoucomeshome.pojo.Courier;

import java.util.List;
import java.util.Map;

/**
 * @author 万骞
 * @date 2022-06-07
 */

public interface CourierService {
    /**
     * 配送员登录
     *
     * @param phone    手机号
     * @param password 密码
     * @return Courier
     * @throws Exception 配送员不存在
     */
    Courier login(String phone, String password) throws Exception;

    /**
     * 查询当前登录者的姓名、头像和已配送订单数量
     *
     * @param phone 手机号
     * @return 当前登录者的姓名、头像和已配送订单数量
     */
    Map<String,Object> selectByPhone(String phone);

    /**
     * 配送员首页
     *
     * @param siteName 门店名字
     * @return 首页信息
     * @throws Exception 查询失败
     */
    List<Map<String,Object>> selectBySiteName(String siteName) throws Exception;

    /**
     * 配送员个人中心待取货
     *
     * @param phone 手机号
     * @return 获取待取货的数据
     * @throws Exception 查询失败
     */
    Map<String,Object> selectPendingPickup(String phone) throws Exception;

    /**
     * 配送员个人中心待送货
     *
     * @param phone 手机号
     * @return 获取待送货的数据
     * @throws Exception 查询失败
     */
    Map<String,Object> selectPendingDelivery(String phone) throws Exception;

    /**
     * 配送员个人中心签收成功
     *
     * @param phone 手机号
     * @return 获取签收成功的订单数据
     * @throws Exception 查询失败
     */
    Map<String,Object> selectSignedSuccessfully(String phone) throws Exception;

    /**
     * 配送员个人中心签收失败
     *
     * @param phone 手机号
     * @return 获取签收失败的订单数据
     * @throws Exception 查询失败
     */
    Map<String,Object> selectFailedToSign(String phone) throws Exception;

    /**
     * 修改配送员登录密码
     *
     * @param phone 手机号
     * @param oldPassword 原密码
     * @param newPassword 新的密码
     * @param newPassword2 重复输入新的密码
     * @throws Exception 两次输入密码不一致
     */
    void updatePassword(String phone,String oldPassword,String newPassword,String newPassword2) throws Exception;

    /**
     * 配送员抢单
     *
     * @param phone 手机号
     * @param id 订单编号
     * @throws Exception 抢单失败
     */
    void updateForGrabOrders(String phone,String id) throws Exception;

    /**
     * 订单列表-待取货
     * @param phone 配送员手机号
     * @return 状态为待取货的订单相关信息的List
     * @throws Exception 未找到订单
     */
    List<Map<String,Object>> getListPendingPickUp(String phone) throws Exception;

    /**
     * 订单列表-待送货
     * @param phone 配送员手机号
     * @return 状态为待送货的订单相关信息的List
     * @throws Exception 未找到订单
     */
    List<Map<String,Object>> getListPendingDelivery(String phone) throws Exception;

    /**
     * 订单列表-签收成功
     * @param phone 手机号
     * @return 状态为签收成功的订单相关信息的List
     * @throws Exception 未找到订单
     */
    List<Map<String,Object>> getListSignInSuccess(String phone) throws Exception ;

    /**
     * 订单列表-签收失败
     * @param phone 配送员电话
     * @return 状态为签收失败的订单相关信息的List
     * @throws Exception 未找到订单
     */
    List<Map<String,Object>> getListSignInFailed(String phone) throws Exception;

    /**
     * 订单详情-待取货
     * @param id 订单id
     * @return 订单的详情
     * @throws Exception 未找到订单
     */
    Map<String,Object> pendingPickUpDetail(String id) throws Exception;

    /**
     * 订单详情-待送货
     * @param id 订单id
     * @return 订单的详情
     * @throws Exception 未找到订单
     */
    Map<String,Object> pendingDeliveryDetail(String id) throws Exception;

    /**
     * 订单详情-签收成功
     * @param id 订单id
     * @return 订单的详情
     * @throws Exception 未找到订单
     */
    Map<String,Object> signInSuccessDetail(String id) throws Exception;

    /**
     * 订单详情-签收失败
     * @param id 订单id
     * @return 订单的详情
     * @throws Exception 未找到订单
     */
    Map<String,Object> signInFailedDetail(String id) throws Exception;

    /**
     * 取货
     * @param id 订单id
     * @return boolean
     * @throws Exception 未找到订单
     */
    boolean pickUp(String id) throws Exception;

    /**
     * 签收
     * @param signIn 签收是否成功
     * @param signInDesc 成功/失败-详情
     * @param remark 成功-备注
     * @param url1 图片1
     * @param url2 图片2
     * @param id 订单id
     * @return boolean
     * @throws Exception 未找到订单
     */
    boolean signIn(boolean signIn,String signInDesc, String remark, String url1,String url2, String id) throws Exception;

    /**
     * 退回
     * @param reason 原因
     * @param id 订单id
     * @return boolean
     * @throws Exception 未找到订单
     */
    boolean sendBack(String reason,String id) throws Exception;
}
